[XEN][POWERPC] Fix Register dumping from ^A^A^A console
authorJimi Xenidis <jimix@watson.ibm.com>
Wed, 22 Nov 2006 21:09:28 +0000 (16:09 -0500)
committerJimi Xenidis <jimix@watson.ibm.com>
Wed, 22 Nov 2006 21:09:28 +0000 (16:09 -0500)
Signed-off-by: Jimi Xenidis <jimix@watson.ibm.com>
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
--HG--
extra : transplant_source : %17p%07aXH%AADK%0C%CBOXF%BAt%E6z%C0%03

xen/arch/powerpc/backtrace.c
xen/include/asm-powerpc/debugger.h

index 02333bb2e40e5710c8d8944d620e2eb1d2da234c..3615d08fe4cb47ce32ce5cebb46cb79664a9b412 100644 (file)
@@ -220,3 +220,15 @@ void __warn(char *file, int line)
 
     console_end_sync();
 }
+
+void dump_execution_state(void)
+{
+    struct vcpu *v = current;
+    struct cpu_user_regs *regs = &v->arch.ctxt;
+
+    show_registers(regs);
+    if (regs->msr & MSR_HV) {
+        printk("In Xen:\n");
+        show_backtrace(regs->gprs[1], regs->pc, regs->lr);
+    }
+}
index 9ef2e375ea97712b850d1b8447df6f03ef93ca74..4e4cea5df2ccebce3dc07d4f6ca6b1a92092e332 100644 (file)
 extern void show_backtrace_regs(struct cpu_user_regs *);
 extern void show_backtrace(ulong sp, ulong lr, ulong pc);
 
-static inline void dump_execution_state(void)
+static inline void show_execution_state(struct cpu_user_regs *regs)
+{
+    show_registers(regs);
+}
+
+extern void dump_execution_state(void);
+
+static inline void dump_all_execution_state(void)
 {
     ulong sp;
     ulong lr;
 
+    dump_execution_state();
     sp = (ulong)__builtin_frame_address(0);
     lr = (ulong)__builtin_return_address(0);
 
@@ -40,13 +48,13 @@ static inline void dump_execution_state(void)
 
 static inline void __force_crash(void)
 {
-    dump_execution_state();
+    dump_all_execution_state();
     __builtin_trap();
 }
 
 static inline void debugger_trap_immediate(void)
 {
-    dump_execution_state();
+    dump_all_execution_state();
 #ifdef CRASH_DEBUG
     __builtin_trap();
 #endif
@@ -55,15 +63,10 @@ static inline void debugger_trap_immediate(void)
 static inline void unimplemented(void)
 {
 #ifdef VERBOSE
-    dump_execution_state();
+    dump_all_execution_state();
 #endif
 }
 
-static inline void show_execution_state(struct cpu_user_regs *regs)
-{
-    show_registers(regs);
-}
-
 extern void __warn(char *file, int line);
 #define WARN() __warn(__FILE__, __LINE__)
 #define WARN_ON(_p) do { if (_p) WARN(); } while ( 0 )